const { HttpException } = require('../core/http-exception')
// 作为Koa中间件的话，就可以接受两个参数：ctx/next
// 全局异常处理
const catchError = async (ctx, next) => {
    try {
        await next()
    } catch (error) {
        // 开发环境or生产环境
        const isHttpException = error instanceof HttpException
        const isDev = global.config.environment === 'dev'
        if (isDev && !isHttpException) {
            throw error
        }
        // error 信息太多并有重要数据或隐私，需要简化，返回清晰明了的，安全的信息给前端
        // HTTP Status 2xx成功 4xx前端错误 5xx服务器错误  
        // 返回 message     error_code      request_url 当前请求的url
        // 错误分类：运行时错误（个人原因：需要检查代码），捕获型错误（取决于环境：需要异常处理）
        
        if (isHttpException) {
            ctx.body = {
                msg: error.message,
                error_code: error.errorCode,
                request: `${ctx.method} ${ctx.path}`
            }
            ctx.status = error.code
        } else {
            ctx.body = {
                msg: 'we made a mistack O(∩_∩)O~~',
                error_code: 999,
                request: `${ctx.method} ${ctx.path}`
            }
            ctx.status = 500
        }
    }
}

module.exports = catchError